package com.wlyy.bcwlw.sys.config.service;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;

import com.wlyy.bcwlw.sys.config.dao.SysConfigDAO;
import com.wlyy.bcwlw.sys.config.entity.SysConfigDTO;


@Transactional
@Service
public class SysConfigService {

	
	@Autowired
	private SysConfigDAO sysConfigDAO;
	@Autowired
	private StaticConfigService staticConfigService;
	
	
	public SysConfigDTO findById(String id){
		return sysConfigDAO.findById(id);
	}
	
	public boolean saveConfigInfo(SysConfigDTO sysConfigDTO){
		SysConfigDTO configDTO = findById(sysConfigDTO.getConfigId());
		
		if(configDTO == null){
			sysConfigDAO.create(sysConfigDTO);
		}else{
			sysConfigDAO.update(sysConfigDTO);
		}
		staticConfigService.setNewConfigs(sysConfigDAO.queryByObject(null));
		return true;
	}
	
	public boolean removeConfigInfoById(String configId){
		if(StringUtils.isEmpty(configId)){
			return false;
		}
		SysConfigDTO configDTO = findById(configId);
		if(configDTO == null){
			return false;
		}
		sysConfigDAO.removeById(configId);
		staticConfigService.setNewConfigs(sysConfigDAO.queryByObject(null));
		return true;
	}
	
	
	public String getValue(String key) {
		
		SysConfigDTO dto = findById(key);
		if (dto == null) {
			return null;
		}
		return dto.getValue();
	}
	
	public <T> T getValue(String key,T defaultValue,Class<T> targetType){
		SysConfigDTO dto = findById(key);
		if (dto == null) {
			return defaultValue;
		}
		String value=dto.getValue();
		if (targetType==String.class) return (T) value;
		else if (targetType==Integer.class) return (T) Integer.valueOf(value);
		else if (targetType==Float.class) return (T) Float.valueOf(value);
		else if (targetType==Double.class) return (T) Double.valueOf(value);
		else return (T)value;
	}
	
	public int getIntValue(String key) {
		
		SysConfigDTO dto = findById(key);
		if (dto == null) {
			return 0;
		}
		return Integer.parseInt(dto.getValue());
	}
	
	public boolean getBooleanValue(String key) {
		
		SysConfigDTO dto = findById(key);
		if (dto == null) {
			return false;
		}
		return Boolean.parseBoolean( dto.getValue() );
	}
	
	
}
